<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // this是函数调用的时候  动态产生的一个变量(内置的，可以直接使用) --- （怎么样让他不变，固定this--- call、apply，bind）
      // this指向 --- 1. 谁调用这个函数，函数内部的this就指向谁
      //              2. 箭头函数里面没有this值，指向的是外层作用域的this值
      //              3. 构造函数特殊一些， 构造函数内部的this就是 new 出来的实例对象
      // function fn() {
      //   // console.log(this);
      //   // console.log(abc);
      //   let aa = 1;
      //   function fn2() {
      //     aa++; // 闭包
      //     console.log(aa, this); // 这个fn2函数，是fn调用完以后，也是由系统调用的，所以这个this也是window
      //   }
      //   fn2();
      // }

      // fn();

      var myName = 11;

      var obj = {
        myName: 22,
        func: function () {
          console.log('1：', this === obj);
          return {
            myName: 33,
            getName: () => {
              // 箭头函数里面没有this值，指向的是外层作用域的this值
              console.log('2：', this);
              console.log('3:', this.myName);
            },
          };
        },
      };

      const obj2 = obj.func();
      // 谁调用这个函数，函数内部的this就指向谁
      obj2.getName();
    </script>
  </body>
</html>
